3.1 docker 快速入门

学习目标:
了解 docker 特点和场景
应用 docker 环境部署

3.1.1 docker 是什么

这一节,我们从定义、场景、历史这三个方面来学习
 
docker 是什么?
Docker is the company driving ( 推动 )  the container movement and the only container platform provider to address every application across the hybrid cloud ( 混合云 ) . Today’s businesses are under pressure to digitally transform ( 数字化转型 )  but are constrained ( 限制 )  by existing applications and infrastructure while rationalizing an increasingly diverse portfolio of clouds, datacenters and application architectures. Docker enables true independence between applications and infrastructure and developers and IT ops to unlock their potential and creates a model for better collaboration and innovation.
Docker 是一个开源的 容器 引擎, 基于 LXC 容器技术 ,使用 Go 语言 开发。
源代码托管在 Github 上,并遵从 Apache2.0 协议。
Docker 采用 C/S 架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器
简单来说: Docker 就是一种快速解决生产问题的一种 技术手段

Docker 生活场景:
 
图一:动画片《七龙珠》里面的胶囊                  图二: 1 号胶囊启动后的效果
官方资料:
Github Docker 源码: https://github.com/docker/docker
Docker 理念
构建
龙珠里的胶囊,将你需要的场景构建好,装在一个小胶囊里
运输
随身携带着房子、车子等,非常方便
运行
只需要你轻轻按一下胶囊,找个合适的地方一放,就 ok

优缺点
优点:
多: 适用场景多
快: 环境部署快、更新快
好: 好多人在用,东西好
省: 省钱省力省人工 (123 原则 )
 
缺点:
太腻歪人: 依赖操作系统
不善于沟通:依赖网络
不善理财: 银行 U 盾等场景不能用

3.1.2 部署 docker

这一节,我们从软件源配置、基础软件安装、 docker 安装六个方面来学习
软件源配置
官网参考:
基础软件源
注意:如果教室网络使用不了阿里云的话,可以配置如下软件源
cd /etc/apt/
mv sources.list sources.list.bak
vim sources.list
# sohu shangdong
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
# 163 guangdong
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
# tsinghua.edu
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# aliyun
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
# neu.edu
deb http://mirror.neu.edu.cn/ubuntu/ xenial main restricted universe multiverse partner
deb http://mirror.neu.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirror.neu.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirror.neu.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

安装依赖软件
apt-get update
apt-get install apt-transport-https ca-certificates curl software-properties-common -y

使用官方推荐源
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

使用阿里云的源 { 推荐 1}
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

使用清华的源 { 推荐 2}
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
检查
apt-get update

docker 软件安装
查看支持的 docker 版本
apt-cache madison docker-ce

安装 docker
apt-get install docker-ce -y

注:
可以指定版本安装 docker
apt-get install docker-ce=<VERSION> -y
启动 docker
systemctl start docker
systemctl status docker
注意:
  ubuntu 安装完毕后,默认就开启服务了
测试 docker
docker version
网卡区别:
安装前:只有 ens33 lo 网卡
安装后: docker 启动后,多出来了 docker0 网卡,网卡地址 172.17.0.1
docker 服务命令格式:
systemctl [ 参数 ] docker
参数详解:
start 开启服务
stop 关闭
restart 重启
status 状态
删除 docker 命令:
yum remove docker-ce
rm -rf /var/lib/docker/
rm -rf /etc/docker
基本目录
docker 基本目录简介
/etc/docker/    docker的认证目录
/var/lib/docker/    docker的应用目录

3.1.3 docker 加速器

这一节,我们从加速器简介,加速器配置这两个方面来学习
 
加速器简介
在国内使用 docker 的官方镜像源,会因为网络的原因,造成无法下载,或者一直处于超时。所以我们使用 daocloud 的方法进行加速配置。
方法 :
访问 daocloud.io   网站,登录 daocloud 账户


点击右上角的 加速器


  在新窗口处会显示一条命令,

我们执行这条命令
加速器配置
修改 daemon.json 文件,增加绿色背景字体内容
# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": []}
注意:
docker cloud 加速器的默认内容是少了一条配置,所以我们要编辑文件在后面加上绿色背景的内容,然后再重启 docker
重启 docker
systemctl restart docker

3.2 镜像管理

学习目标:
说出 Docker 镜像的定义和作用
应用 Docker 镜像的基本操作

3.2.1 镜像简介

Docker 镜像是什么?
它是一个只读的文件,就类似于我们安装操作系统时候所需要的那个 iso 光盘镜像,通过运行这个镜像来完成各种应用的部署。
这里的镜像就是一个能被 docker 运行起来的一个程序。

3.2 . 2   搜索、查看 、获取、历史

这一节,我们从搜索、查看、获取三个方面来学习
搜索镜像
命令格式:
docker search [image_name]
命令演示:
docker search ubuntu
获取 镜像
命令格式:
docker pull [image_name]
命令演示:
docker pull ubuntu
docker pull nginx
注释:
获取的镜像在哪里?
/var/lib/docker 目录下,具体详见docker仓库知识

查看 镜像
命令格式:
docker images <image_name>
命令演示:
docker images
镜像的 ID 唯一标识了镜像,如果 ID 相同 , 说明是同一镜像。 TAG 信息来区分不同发行版本,如果不指定具体标记 , 默认使用 latest 标记信息
docker images -a 列出所有的本地的 images( 包括已删除的镜像记录 )
查看镜像历史
查看镜像历史命令格式:
docker history [image_name]
我们获取到一个镜像,想知道他默认启动了哪些命令或者都封装了哪些系统层,那么我们可以使用 docker history 这条命令来获取我们想要的信息
 

3.2 . 3   重命名、删除

这一节,我们从重命名、删除这两个方面来学习。
镜像 重命名
命令格式:
docker tag [old_image]:[old_version] [new_image]:[new_version]
命令演示:
docker tag nginx:latest sswang-nginx:v1.0
删除 镜像
命令格式:
docker rmi [image_id/image_name:image_version]
命令演示:
docker rmi 3fa822599e10
注意:
如果一个 image_id 存在多个名称,那么应该使用 name:tag 的格式删除镜像
清除状态为 dangling 的镜像
docker image prune
移除所有未被使用的镜像
docker image prune -a
删除部分镜像
docker image prune -a --filter "until=24h"

3.2.4 导出、导

这一节,我们从镜像导入、导出两个方面来学习。
 
导出镜像
将已经下载好的镜像,导出到本地,以备后用。
命令格式:
docker save -o [包文件] [镜像]
docker save [镜像1] ... [镜像n] > [包文件]
注意:
docker save 会保存镜像的所有历史记录和元数据信息
导出镜像
docker save -o nginx.tar sswang-nginx
导入 镜像
为了更好的演示效果,我们先将 nginx 的镜像删除掉
docker rmi nginx:v1.0
docker rmi nginx
导入镜像命令格式:
docker load < [image.tar_name]
docker load --input [image.tar_name]
注意 :
docker load 不能指定镜像的名称
导入镜像文件
docker load < nginx.tar

3.3 容器管理

学习目标:
说出 Docker 容器的定义和作用
应用 Docker 容器的基本操作

3.3.1 容器简介

容器是什么?
容器就类似于我们运行起来的一个操作系统,而且这个操作系统启动了某些服务。
这里的容器指的是运行起来的一个 Docker 镜像。

3.3.2 查看、启动

这一节,我们从容器查看、启动两个方面来学习。
 
查看容器
命令格式: docker ps
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
注意:
     管理 docker 容器可以通过名称,也可以通过 ID
ps 是显示正在运行的容器, -a 是显示所有运行过的容器,包括已经不运行的容器
 
启动容器
守护进程方式启动容器
命令格式: docker run < 参数 ,可选 > [docker_image]   [ 执行 的命令 ]
Docker 容器在后台以守护形式运行。此时可以通过添加 -d 参数来实现
docker run -d nginx
 
启动已终止的容器
在生产过程中,常常会出现运行和不运行 容器,我们使用 start 命令开起一个已关闭的容器
命令格式: docker start [container_id]

3.3.3 关闭、删除

这一节,我们从容器关闭、删除这两个方面来学习
关闭容器
在生产中,我们会以为临时情况,要关闭某些容器,我们使用 stop 命令来关闭某个容器
命令格式: docker stop [container_id]
关闭容器 id
docker stop 8005c40a1d16
删除容器
删除容器有两种方法:
正常删除 -- 删除已关闭的
强制删除 -- 删除正在运行的
 
正常删除容器
命令格式:
docker rm [container_id]
docker container prune
删除已关闭的容器
docker rm 1a5f6a0c9443
强制删除运行容器
命令格式:
docker rm -f [container_id]
删除正在运行的容器
docker rm -f 8005c40a1d16
删除部分容器
docker container prune --filter "until=24h"
拓展批量关闭容器
命令格式:
docker rm -f $(docker ps -a -q)
 

3.3.4 进入、退出

这一节,我们从容器进入 ( 三方法 ) 、退出两个方面来学习。
 
进入容器我们学习两种方法:
1 、创建容器的同时进入容器
2 、手工方式进入容器
 
创建并进入容器
命令格式:
docker run --name [container_name] -it [docker_image] /bin/bash
~]# docker run -it --name sswang-nginx nginx /bin/bash
root@7c5a24a68f96:/# echo "hello world"
hello world
root@7c5a24a68f96:/# exit
exit        
docker 容器启动命令参数详解:
--name: 给容器定义一个名称
-i: 则让容器的标准输入保持打开。
-t: docker 分配一个伪终端 , 并绑定到容器的标准输入上
/bin/bash: 执行一个命令
退出容器:
方法一: exit
方法二: Ctrl + D
 
手工方式进入容器
命令格式:
docker exec -it 容器 id /bin/bash
效果演示:
docker exec -it d74fff341687 /bin/bash

3.3.5 基于容器创建镜像

提交方式:
命令格式:
docker commit -m ' 改动信息 ' -a " 作者信息 " [container_id] [new_image:tag]
命令演示:
进入一个容器,创建文件后并退出
./docker_in.sh d74fff341687
mkdir /sswang
exit
创建一个镜像
docker commit -m 'mkdir /sswang' -a "sswang" d74fff341687 sswang-nginx:v0.2
查看镜像
docker images
启动一个容器
docker run -itd sswang-nginx:v0.2 /bin/bash
进入容器进行查看
./docker_in.sh ae63ab299a84
ls
 

3.3.6 日志、信息

这一节,我们从日志、详细信息两方面来学习。
查看容器运行日志
命令格式:
docker logs [ 容器 id]
命令效果:
docker logs 7c5a24a68f96
 
查看容器详细信息
命令格式:
docker inspect [ 容器 id]
命令效果:
查看容器全部信息
docker inspect 930f29ccdf8a
查看容器网络信息
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 930f29ccdf8a

3.4 仓库管理

学习目标:
说出 Docker 仓库的定义和作用
应用 Docker 仓库的基本操作

3.4.1 仓库简介

这一节,我们从仓库定义、 docker 仓库、相关命令这三个方面来学习。
仓库定义
仓库是什么?
仓库就类似于我们在网上搜索操作系统光盘的一个镜像站。
这里的仓库指的是 Docker 镜像存储的地方。
 
Docker 仓库
Docker 的仓库有三大类:
公有仓库: Docker hub Docker cloud 、等
私有仓库: registry harbor
本地仓库:在当前主机存储镜像的地方。
 
相关命令
和仓库相关的命令:
docker login [ 仓库名称 ]
docker pull [ 镜像名称 ]
docker push [ 镜像名称 ]
docker search [ 镜像名称 ]
 
我们接下来就用 registry 来部署一个私有的仓库

3.4.2 私有仓库部署

这一节,我们从流程、方案两个方面来学习
 
创建仓库流程
1 、根据 registry 镜像创建容器
2 、配置仓库权限
3 、提交镜像到私有仓库
4 、测试
 
实施方案
下载 registry 镜像
docker pull registry
启动仓库容器
docker run -d -p 5000:5000 registry
检查容器效果
curl 127.0.0.1:5000/v2/_catalog
配置容器权限
vim /etc/docker/daemon.json
{"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.14:5000"]}
注意:
私有仓库的 ip 地址是宿主机的 ip ,而且 ip 两侧有双引号
重启 docker 服务
systemctl restart docker
systemctl status docker
效果查看
启动容器
docker start 315b5422c699
标记镜像
docker tag ubuntu-mini 192.168.8.14:5000/ubuntu-14.04-mini
提交镜像
docker push 192.168.8.14:5000/ubuntu-14.04-mini
下载镜像
   docker pull 192.168.8.14:5000/ubuntu-14.04-mini